package com.ruoyi.activiti.service;

import com.ruoyi.activiti.condition.ProcessDefinitionCondition;
import com.ruoyi.activiti.condition.TodoCondition;
import com.ruoyi.activiti.domain.IProcessDefinition;
import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author danghf
 * @date 2024/04/26 19:31:03
 */
public interface ActivitiService{

    /**
     * 部署流程
     */
    public AjaxResult deployment(MultipartFile file);

    /**
     * 获取文件资源
     * @param deploymentKey 部署key
     * @param deploymentVersion 部署版本
     * @param resourceType 资源类型
     *
     */
    public InputStream getFileResource(String deploymentKey, String deploymentVersion, String resourceType);

    /**
     * 获取流程定义
     * @param condition 查询条件
     */
    public List<IProcessDefinition> getProcessDefinitionKeys(ProcessDefinitionCondition condition);

    /**
     * 撤销流程
     * @param deploymentId 部署id
     * @param cascade 是否级联
     */
    AjaxResult cancelDeployment(String deploymentId, boolean cascade);

    /**
     * 我的待办任务
     */
    List<?> getMeToDone(TodoCondition condition);

    /**
     * 完成任务
     * @param taskId 任务id
     * @param variables 参数
     */
    AjaxResult completeTask(String taskId, Map<String, Object> variables);

    /**
     * 全部待办
     */
    List<?> getAllToDone(TodoCondition condition);

    /**
     * 我的已办
     */
    List<?> getCompletedTaskWithMe(TodoCondition condition);

    /**
     * 强制终止流程实例
     * @param processInstanceId 流程实例id
     * @param message 终止原因
     */
    AjaxResult forceTerminateProcessInstance(String processInstanceId, String message);

    /**
     * 获取所有流程实例
     */
    List<?> getProcessInstances(TodoCondition condition);

    /**
     * 获取用户的流程实例
     */
    List<?> getProcessInstanceByUserId(TodoCondition condition);

    /**
     * 启动一个流程没有业务表单
     * @param processDefinitionKey 流程定义key
     * @param variables 参数
     */
    AjaxResult startByProcessDefinitionKey(String processDefinitionKey, Map<String, Object> variables);

    /**
     * 驳回任务
     * @param taskId taskId
     */
    AjaxResult rejected(String taskId);

    /**
     * 获取流程图
     * @param processInstanceId 流程实例id
     */
    InputStream getProcessDiagram(String processInstanceId);
}
